package com.cn.wanxi.util;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebFilter("/*")//得到所有的访问后台地址
public class MyFilter extends HttpFilter {
    /**
     * servlet的什么周期？
     *
     * @throws ServletException
     */
    @Override
    public void init() throws ServletException {
        // 定时器：只执行一次
    }

    @Override
    public void destroy() {
// 当正常销毁时，关闭定时器（或者做其他事情）
        //保证数据同步：触发数据库的tigger
    }

    @Override
    protected void doFilter(HttpServletRequest req, HttpServletResponse resp, FilterChain chain) throws IOException, ServletException {
//正在执行代码
//        1.乱码处理
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
//        2.拦截
//        根据用户登录状态进行拦截
//        状态：怎么判断已经登录？
//        1.在数据库里面用户表加入一个登录状态
//        2.作用域：session，application
//        拿到登录状态,根据用户名去session里面取值，如果为空，则没有存值，表示没有登录
//        否则，登录成功
//        根据后台得到的地址，判断是否有back，有则需要登录，没有，则不用判断
//        1.需要拿到访问地址？
//        2.只要里面有back的字符，则不用判断
        String path = req.getServletPath();
        System.out.println(path);
        //以back开始
        boolean isNeed = path.startsWith("/back/");
        if (isNeed) {
            String username = req.getParameter("username");
            String result = (String) req.getSession().getAttribute(username);
            boolean isLogin = result != null;
            if (isLogin) {
                System.out.println("登录成功");
                chain.doFilter(req, resp);
            } else {
                System.out.println("登录失败");
                resp.sendRedirect("/html/login.html");
            }
        } else {
            chain.doFilter(req, resp);
        }

    }
}
